/*
 * Class: CustomerRefundDAO
 * Created by: Mary Joy Pascual
 * Date Created: 06/25/2014
 * Company: Netsuite
*/
package com.netsuite.dao;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.rmi.RemoteException;
import java.text.ParseException;

import javax.xml.rpc.ServiceException;
import javax.xml.soap.SOAPException;

import com.netsuite.adapter.CustomerRefundAdapter;
import com.netsuite.constants.Constants;
import com.netsuite.helper.ErrorHelper;
import com.netsuite.helper.ErrorSOAPHelper;
import com.netsuite.logger.LoggerImp;
import com.netsuite.pojo.CustomerRefundPOJO;
import com.netsuite.webservices.platform.core_2014_1.RecordRef;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRecordCountFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRequestLimitFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededRequestSizeFault;
import com.netsuite.webservices.platform.faults_2014_1.ExceededUsageLimitFault;
import com.netsuite.webservices.platform.faults_2014_1.InvalidCredentialsFault;
import com.netsuite.webservices.platform.faults_2014_1.InvalidSessionFault;
import com.netsuite.webservices.platform.messages_2014_1.WriteResponse;
import com.netsuite.webservices.platform_2014_1.NetSuitePortType;
import com.netsuite.webservices.transactions.customers_2014_1.CustomerRefund;

public class CustomerRefundDAO {

	private static String CLASS_NAME = CustomerRefundDAO.class.getName();
	
	private NetSuitePortType _service = null;

	public CustomerRefundDAO() throws ErrorHelper {
		try {
			MainDAO mainDAO = new MainDAO();
			_service = mainDAO.get_service();
		} catch (FileNotFoundException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_FNF+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_FNF+ e.getMessage());
		} catch (ServiceException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SE+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SE+ e.getMessage());
		} catch (IOException e) {
			LoggerImp.errorLog(CLASS_NAME,Constants.ERROR_IO+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_IO+ e.getMessage());
		} catch (SOAPException e) {
			LoggerImp.errorLog(CLASS_NAME,Constants.ERROR_SOAP+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SOAP+ e.getMessage());
		}

	}
	
	public void upsertCustomerRefund(CustomerRefundPOJO cusRefPojo) throws ErrorHelper, ParseException {
		
		LoggerImp.startLog(CLASS_NAME, "upsertCustomerRefund()");

		CustomerRefund cusRef = CustomerRefundAdapter.setCustomerRefund(cusRefPojo);
		
		try {
			LoggerImp.debugLog(CLASS_NAME, "Adding State Record....");
			WriteResponse writeResponse = _service.upsert(cusRef);
			if(!writeResponse.getStatus().isIsSuccess()){
				ErrorSOAPHelper.displayError(CLASS_NAME, writeResponse.getStatus().getStatusDetail());
	  		} else {
	  			RecordRef rec = (RecordRef)writeResponse.getBaseRef();
	  			LoggerImp.infoLog(CLASS_NAME, "Customer Refund Id#"+rec.getInternalId()+" was successfully upserted");
	  		}
		} catch (ExceededRequestSizeFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SIZ+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SIZ+ e.getMessage());
		} catch (InvalidCredentialsFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_INV+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_INV+ e.getMessage());
		} catch (ExceededUsageLimitFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_USE+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_USE+ e.getMessage());
		} catch (ExceededRequestLimitFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_REQ+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_REQ+ e.getMessage());
		} catch (ExceededRecordCountFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_MAX+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_MAX+ e.getMessage());
		} catch (InvalidSessionFault e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_SES+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SES+ e.getMessage());
		} catch (RemoteException e) {
			LoggerImp.errorLog(CLASS_NAME, Constants.ERROR_REM+ e.getMessage());
			throw new ErrorHelper(CLASS_NAME,Constants.ERROR_SES+ e.getMessage());
		}
		
		LoggerImp.endLog(CLASS_NAME, "upsertCustomerRefund()");

	}
	

}
